﻿using System;
using LayerEntity.Persona;
using LayerEntity.Sistema;

namespace System2012.Persona
{
    public partial class MantenimientoContactos : DevExpress.XtraEditors.XtraForm 
    {
        public MantenimientoContactos( IEPersona pers)
        {
            this.InitializeComponent();
            per = pers;
        }

        #region Variables y Propiedades
        IEPersona per = null;

        public IEPersona Persona
        {
            get{
               return  per;
            }
        }
        #endregion

        #region Metodos

        private void SetContactos() {
            if (per != null) {
                TxtNombrePersona.EditValue = per.FullName;
                EDocumento doc = SystemUtils.RecordManagerCommonList.GetDocument((long)per.IdTipoDocumento);
                if (doc != null) {
                    TxtDocumento.EditValue = doc.Abreviatura;
                }
                TxtNumeroPersona.EditValue = per.NumeroDocumento;
                RefreshData();
            }
        }

        void RefreshData()
        {
            if (per != null)
            {
                gridControl1.DataSource = per.GetContacts();
                gridControl1.RefreshDataSource();
            }
        }

        void Exportar() {
            if (gridView1.RowCount > 0)
            {
                SystemUtils.Exportar("Contactos", gridControl1);
            }
            else {
                SystemUtils.AlerMessaje("No hay Datos a Exportar");
            }
        }

        private void Save()
        {

            EContacto c = ucContacto1.GetContacto();

            if (c != null) {
              int res=  SystemUtils.RecordManagerPersona.SaveContact(c, ucContacto1.Operacion);
              if (res > 0) {
                  if (ucContacto1.Operacion == LayerLogic.EnumOperaciones.Insertar)
                  {
                      c.Item = res;
                  }
                  c.IdPersona = per.IdPersona.Trim();
                  c.TipoContacto = CbTipo.SelectedIndex + 1;
                  int resRel = SystemUtils.RecordManagerPersona.SaveContactRelation(c, ucContacto1.OperacionRelacion );
                  if (resRel > 0) {
                      c.IdRelacion = resRel;
                      per.AddContactInfo(c);
                      SystemUtils.InformationMessaje("Contacto Registrado");
                      ucContacto1.NuevoContancto();
                      RefreshData();
                      gridControl1.Focus();
                  }
                  
              }
            }

        }
        #endregion

        private void MantenimientoContactos_Load(object sender, EventArgs e)
        {
            ucContacto1.LoadDocumentos();
            ucContacto1.NuevoContancto();
            SetContactos();
                    }

        private void GridView1FocusedRowChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs e)
        {
            EContacto con = (EContacto)gridView1.GetFocusedRow();
            if (con != null) {
                CbTipo.SelectedIndex = con.TipoContacto - 1;
                ucContacto1.SetContacto(con );
            }
        }

        private void GridView1CustomColumnDisplayText(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDisplayTextEventArgs e)
        {
            if (e.Column.Name.Equals("gcTipoContaco")) {
                object tipo = gridView1.GetRowCellValue(e.RowHandle, gcIdTipoContacto);
                if (tipo != null) {
                    int intTipo = Convert.ToInt32(tipo);
                    switch (intTipo )
                    {
                        case 1:
                            e.DisplayText = "Contacto";
                            break;
                        case 2:
                            e.DisplayText = "Aval";
                            break;
                        case 3:
                            e.DisplayText = "Contacto-Aval";
                            break;
                        default:
                            e.DisplayText = "No Definido";
                            break;
                    }
                }
            }
            if (e.Column.Name.Equals("gcEstadoRelacion")) {
                object obj = gridView1.GetRowCellValue(e.RowHandle, gcIdEstadoRelacion);
                if (obj != null) {
                    EEstado est = SystemUtils.RecordManagerCommonList.GetEstadoById(Convert.ToInt32(obj.ToString()));
                    if (est != null) {
                        e.DisplayText = est.Descripcion;
                    }
                }
            }
            if (e.Column.Name.Equals("gcTipoDocumento"))
            {
                object idDoc = gridView1.GetRowCellValue(e.RowHandle, gcIdDocumento);
                if (idDoc != null) {
                    try
                    {
                        EDocumento doc = SystemUtils.RecordManagerCommonList.GetDocument(Convert.ToInt64 (idDoc.ToString()));
                        if (doc != null)
                        {
                            e.DisplayText = doc.Abreviatura;
                        }
                    }
                    catch (Exception ex) {
                        Console.Write(ex.ToString());
                    }
                }
            }

            if (e.Column.Name.Equals("gcDesUbigeo")) {
                object obj = gridView1.GetRowCellValue(e.RowHandle, gcUbigeo);
                if (obj != null) {
                    EUbigeo ubi = SystemUtils.RecordManagerCommonList.GetUbigeoByUbigeo(obj.ToString());
                    if(ubi !=null){
                        e.DisplayText = ubi.ToString();
                    }
                }
            }
        }

        private void BarManager1ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            if (e.Item.Tag.ToString().Equals("Nuevo"))
            {
                ucContacto1.NuevoContancto();
            }
            if (e.Item.Tag.ToString().Equals("Exportar"))
            {
                Exportar();
            }
            if (e.Item.Tag.ToString().Equals("Guardar")) {
                Save();
            }
        }

        private void CbTipo_SelectedIndexChanged(object sender, EventArgs e)
        {
            ucContacto1.SetTipo(CbTipo.SelectedIndex+1);
        }
    }
}